package cn.design.realize.demo2;

import cn.design.realize.demo1.State;

import java.util.HashMap;
import java.util.Map;

/**
 * @author dlq
 * @description
 *      环境类,定义客户感兴趣的接口,持有当前状态的具体状态的实例(拥有States属性)，此外，他还定义了供外部调用者使用的状态模式的接口
 * @date 2020/10/12 9:46
 * @since 1.0
 */
public class Context {
    //票数缓存
    private Map<String,Integer> map  = new HashMap<>();
   //持有状体处理对象
    private VoteState state = null;
    /**
     * @description 向外部(客户端提供的接口)
     * @param user 每个调用一次方法，相当于投一次票
     * @return void
     * @author dlq
     * @date 2020/10/12 9:49
     */
    public void vote(String user){

        //判断是否第一次投票---意味着map没有改user
        Integer count = map.get(user);
        if (count == null){
            count = 0;
        }
        count++;
        map.put(user,count);
        //再次获取当前票数
       Integer  currentCount = map.get(user);

       if (currentCount == 1){
           state = new NormalVoteState();
       }
       if (currentCount == 2){
           state = new RepeatVoteState();
       }
       if (currentCount >2 && currentCount <= 4){
           state = new MaliceVoteState();
       }
       if (currentCount > 4){
           state = new BlacklistVoteState();
       }
       //根据当前票数,执行相应的处理
       state.handle();
    }

}
